export type Awaitable<T>=T|Promise<T>;
export interface SizeObject{
	width:number;
	height:number;
}
export type Axis='x'|'y';
export type FieldGetter<D,R=string>=D extends any[]
	?((...args:D) => R)
	:((data:D) => R);
export type PropOrGetter<D,R=string>=string|FieldGetter<D,R>;
export type PropOrDescriptor<D,R=string>=string|{
	get:FieldGetter<D,R>;
	set:(o:D,val:R) => void;
};
export type BeforeProcessor<D,R=void|boolean>=(data:D) => Awaitable<R>;
export type LazyLoadStatus<T=void>=Promise<T>|'loaded'|'failed';
export type RelativePosition='start'|'center'|'end';
export type MovePosition='start'|'center'|'end'|'nearest';
export type HrefTarget='_blank'|'_self'|'_parent'|'_top';
export interface CacheMap<K,V>{
	get:(key:K) => V|undefined;
	set:(key:K,value:V) => void;
	values:() => V[];
	clear:() => void;
}